package com.usian.admin.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.usian.admin.mapper.AdUserMapper;
import com.usian.admin.service.UserLoginService;
import com.usian.model.admin.dtos.AdUserDto;
import com.usian.model.admin.pojos.AdUser;
import com.usian.model.common.dtos.ResponseResult;
import com.usian.model.common.enums.AppHttpCodeEnum;
import com.usian.utils.common.AppJwtUtil;
import com.usian.utils.common.BCrypt;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.util.HashMap;
import java.util.List;

/**
 * IService 实现类（泛型：M 是 mapper 对象，T 是实体）
 */
@Service
public class UserLoginServiceImpl extends ServiceImpl<AdUserMapper, AdUser> implements UserLoginService {

    @Override
    public ResponseResult login(AdUserDto adUserDto) {
        /**
         * 1、请求参数 合法性校验
         */
        if (StringUtils.isEmpty(adUserDto.getName()) || StringUtils.isEmpty(adUserDto.getPassword())){ // 校验参数 isBlank(null和"") isEmpty(null)
            return ResponseResult.setAppHttpCodeEnum(AppHttpCodeEnum.PARAM_INVALID); // 无效参数
        }
        /**
         * 2、where name = xxx 根据登录名，去数据查询需要的数据
         * eq(column,val)
         * column 字段(实体类) val 值(DTO)
         */
        LambdaQueryWrapper<AdUser> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(AdUser::getName,adUserDto.getName()); // AdUser::getName：登录用户名
        List<AdUser> list = list(wrapper);
        /**
         * 3、查询的结果，有无
         */
        if(list.isEmpty()){ // 校验参数 isBlank(null和"") isEmpty(null)
            return ResponseResult.setAppHttpCodeEnum(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR); // 用户名错误
        }
//        /**
//         * 4、有的话，校验密码(BCrypt)
//         */
//        if(BCrypt.checkpw(adUserDto.getPassword(),list.get(0).getPassword())){
//            /**
//             * 5、如果密码一致，登录成功，颁发一个token，用户的信息
//             */
//            // String token = AppJwtUtil.getToken(Long.valueOf(list.get(0).getId() + ""));
//            String token = AppJwtUtil.getToken(list.get(0).getId().longValue());
//            HashMap<String, Object> data = new HashMap<>();
//            data.put("token",token);
//            AdUser adUser = list.get(0);
//            adUser.setPassword("");
//            adUser.setSalt("");
//            data.put("user",adUser);
//            return ResponseResult.okResult(data);
//        }else {
//            return  ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR); // 密码错误
//        }
        /**
         * 4、有的话，校验密码(MD5)
         */
        if(list.get(0).getPassword().equals(DigestUtils.md5DigestAsHex((adUserDto.getPassword() + list.get(0).getSalt()).getBytes()))){
            /**
             * 5、如果密码一致，登录成功，颁发一个token，用户的信息
             */
            // String token = AppJwtUtil.getToken(Long.valueOf(list.get(0).getId() + ""));
            String token = AppJwtUtil.getToken(list.get(0).getId().longValue());
            HashMap<String, Object> data = new HashMap<>();
            data.put("token",token);
            AdUser adUser = list.get(0);
            adUser.setPassword("");
            adUser.setSalt("");
            data.put("user",adUser);
            return ResponseResult.okResult(data);
        }else {
            return  ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR); // 密码错误
        }
    }

}